<?php

class Model_Paginator_PageUsers extends Zend_Paginator_Adapter_DbSelect
{
    //public $tag = 0; // tag_id
    
    public $page_id = 0; //если указано, то выбирается только одна страница 
    
    //public $cat = 0; //cat_id

    /**
     * Адаптер Zend_Paginator для модели Application_Model_Page
     *
     * @param  integer $offset Page offset
     * @param  integer $itemCountPerPage Number of items per page
     * @return Array
     */
    public function getItems($offset, $itemCountPerPage)
    {   
        // Создаем безопасный разделитель
        //$separator = 'Zend_' . substr(md5(time()), 10, 10);
        // Выполняем выборку страниц и меток к ним 
        // используя связь меток с RSS фидами и фидов со страницами
        $select = $this->_select->getAdapter()->select();
        $select->from(array('p' => TABLE_PREF . 'users')); // из таблицы страниц
//                ->joinLeft(
//                        array('fl' => TABLE_PREF . 'lectures_tags'),
//                        'fl.lecture_id = p.lecture_id', // связь
//                        array()) //из связующей таблицы не извлекаем полей
//                ->joinLeft(
//                        array('cat' => TABLE_PREF . 'courses'), 
//                        'cat.course_id = p.course_id',
//                        array('name')
//                        )
//                ->joinLeft(
//                        array('usr' => TABLE_PREF . 'users'),
//                        'p.user_id = usr.id',
//                        array('username')
//                        )
//                ->joinLeft(
//                        array('l' => TABLE_PREF . 'tags'), //таблица меток
//                        'fl.tag_id = l.tag_id' ,//связь
//                        array('labels' => // извлекаем все метки связывая их разделителем
//                    new Zend_Db_Expr("GROUP_CONCAT(DISTINCT l.tag SEPARATOR '$separator')"),
//                    'label_ids' => // также извлекаем id меток
//                    new Zend_Db_Expr("GROUP_CONCAT(DISTINCT l.tag_id SEPARATOR '$separator')"))
//                        );       
        
//                ->joinLeft(
//                    array('s' => TABLE_PREF . 'sales'), // из 'feeds_labels'
//                    's.lecture_id = p.lecture_id', // связь
//                    array('users' => // также извлекаем id меток
//                    new Zend_Db_Expr("GROUP_CONCAT(DISTINCT s.user_id SEPARATOR '$separator')")))
//                ->joinLeft(
//                    array('f' => TABLE_PREF . 'favorites'), // из 'feeds_labels'
//                    'f.lecture_id = p.lecture_id', // связь
//                    array('favorites' => // также извлекаем id меток
//                    new Zend_Db_Expr("GROUP_CONCAT(DISTINCT f.user_id SEPARATOR '$separator')")));

        
        
//        if($this->tag > 0)
//            $select->where ('l.tag_id=?',$this->tag);
//        elseif($this->page_id > 0)
//                $select->where ('p.course_id=?',$this->page_id);
//        
//        if($this->cat > 0)
//            $select->where ('p.course_id=?',$this->cat);
        
        $select->order('p.id') //сортируем по этому полю
            ->group(array('p.id')) //групируем записи по страницам
            ->limit($itemCountPerPage, $offset); //ограничение по навигации

        //$select->where('writecode = ?', 'done');
        
        $rows = $select->query()->fetchAll(); // array
      
        // Заменяем строки с разделителем 
        // на массив ассоциативных массиво меток array(id,label,url)
//        foreach($rows as $i => $row)
//        {
//            // Из разделенных временным разделителем строк сделаем массивы
//            $labels = explode ($separator, $row['labels']);
//            $label_ids = explode ($separator, $row['label_ids']);
//
//            $rows[$i]['labels'] = array();
//            foreach($labels as $li => $label)
//                if($label_ids[$li])
//                    $rows[$i]['labels'][] = array (
//                        'id'=>$label_ids[$li],
//                        'label'=> $label,
//                        'url' => Zend_Navigation_Page_Mvc::factory(array(
//                            'controller' => 'index',
//                            'action' => 'tag',
//                            'route' => 'default',
//                            'params' => array(
//                                'label' => $label_ids[$li],
//                                'page' => 1
//                                )
//                        ))->getHref()
//                    );
//            unset($rows[$i]['label_ids']);

//            $users = explode ($separator, $row['users']);
//            $rows[$i]['users'] = array();
//            foreach ($users as $user)
//                if($user)
//                    $rows[$i]['users'][] = $user;
//
//            $favorites = explode ($separator, $row['favorites']);
//            $rows[$i]['favorites'] = array();
//            foreach ($favorites as $user)
//                if($user)
//                    $rows[$i]['favorites'][] = $user;


        //}
        // возвращаем Array
        return $rows;
    }
    
    public function getCountSelect()
    {
        if ($this->_countSelect !== null)
        {
            return $this->_countSelect;
        }
        
        // Если достаем только 1 страницу
        if($this->page_id > 0)
            return 1;

        $select = $this->_select->getAdapter()->select();
        
        $select->from(array('p' => TABLE_PREF . 'users'),'')
                ->columns(new Zend_Db_Expr("COUNT(*) AS c"));
//        if($this->tag > 0)
//        {
//            $select->joinLeft(
//                array('fl' => TABLE_PREF . 'lectures_tags'),
//                'fl.lecture_id = p.lecture_id');
//        
//            $select->where ('fl.tag_id = ?',$this->tag);
//        }
//        
//        if($this->cat > 0)
//            $select->where ('p.course_id=?',$this->cat);       
        
        $rows = $select->query()->fetchAll();
      
        $rowCount = (int) $rows[0]['c'];
   
        $this->_countSelect = $rowCount;
       
        return $rowCount;        
    }
}